home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 2: Applications
/
Linux Cubed Series 2 - Applications.iso
/
hamradio
/
tnos-2.000
/
tnos-2
/
sounds.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-18
|
4KB
|
228 lines
#include "global.h"
#include "commands.h"
#include "socket.h"
#if !defined(_lint) && !defined(MSDOS)
static char rcsid[] OPTIONAL = "$Id: sounds.c,v 1.7 1996/07/19 00:46:20 root Exp root $";
#endif
#ifdef SOUNDS
struct sounds {
const char *name; /* name of the sound */
char *cmd; /* command to be executed to produce the sound */
const char *description; /* description of what the sound is for */
struct sounds *next; /* linked list */
};
#define NULLSOUND ((struct sounds *)0)
static struct sounds *snds = NULLSOUND;
static void showsound __ARGS((struct sounds *s));
static struct sounds *findsound __ARGS((const char *name));
static struct sounds *newsound __ARGS((const char *name));
int dosounddefine __ARGS((int argc,char *argv[],void *p));
static int dosoundplay __ARGS((int argc,char *argv[],void *p));
static int dosoundlist __ARGS((int argc,char *argv[],void *p));
static int dosounddelete __ARGS((int argc,char *argv[],void *p));
/* sounds subcommand table */
static struct cmds SOUNDtab[] = {
{ "define", dosounddefine, 0, 0, NULLCHAR },
{ "delete", dosounddelete, 0, 2, "sounds delete \"soundname\"" },
{ "list", dosoundlist, 0, 0, NULLCHAR },
{ "play", dosoundplay, 0, 2, "sounds play \"soundname\"" },
{ NULLCHAR, NULL, 0, 0, NULLCHAR }
};
int
dosounds(argc,argv,p)
int argc;
char *argv[];
void *p;
{
return subcmd(SOUNDtab,argc,argv,p);
}
static void
showsound (s)
struct sounds *s;
{
tprintf ("UNIX Command %s: %s\n \"%s\"\n",
(s->description) ? s->description : "for sound",
s->name, (s->cmd == NULLCHAR || !*s->cmd) ?
"(none)" : s->cmd);
}
int
dosounddefine(argc,argv,p)
int argc;
char *argv[];
void *p OPTIONAL;
{
struct sounds *s;
if (argc > 4 || argc < 2) {
tprintf ("Usage: sounds define \"soundname\" [\"soundcommand\" [\"sounddescription\"]]\n");
return 0;
}
s = findsound (argv[1]);
if (argc < 3 && s == NULLSOUND) {
tprintf ("Sound '%s' not defined!\n", argv[1]);
return 0;
}
if (s == NULLSOUND)
s = newsound (argv[1]);
if (argc == 2) {
showsound (s);
return 0;
}
if (s->cmd != NULLCHAR)
free (s->cmd);
s->cmd = strdup (argv[2]);
if (argc > 3) {
if (s->description != NULLCHAR)
free (s->description);
s->description = strdup (argv[3]);
}
return 0;
}
static int
dosoundplay(argc,argv,p)
int argc OPTIONAL;
char *argv[];
void *p OPTIONAL;
{
if (!playsound (argv[1]))
tprintf ("Sound '%s' not defined!\n", argv[1]);
return 0;
}
static int
dosoundlist(argc,argv,p)
int argc OPTIONAL;
char *argv[] OPTIONAL;
void *p OPTIONAL;
{
struct sounds *s;
for (s = snds; s; s = s->next)
showsound (s);
return 0;
}
static int
dosounddelete(argc,argv,p)
int argc OPTIONAL;
char *argv[];
void *p OPTIONAL;
{
struct sounds *s = snds, *tmp = NULLSOUND;
if (s && !stricmp (s->name, argv[1])) {
tmp = s;
snds = s->next;
} else for (; s && s->next; s = s->next) {
if (!stricmp (s->next->name, argv[1])) {
tmp = s->next;
s->next = tmp->next;
break;
}
}
if (tmp) {
if (tmp->name)
free (tmp->name);
if (tmp->cmd)
free (tmp->cmd);
if (tmp->description)
free (tmp->description);
tprintf ("Sound '%s' Deleted!\n", argv[1]);
}
return 0;
}
static struct sounds *
findsound (name)
const char *name;
{
struct sounds *s;
if (name && *name) {
for (s = snds; s; s = s->next) {
if (!strnicmp (name, s->name, strlen (name)))
return s;
}
}
return NULLSOUND;
}
static struct sounds *
newsound (name)
const char *name;
{
struct sounds *s;
s = callocw (1, sizeof(struct sounds));
s->next = snds;
snds = s;
s->name = strdup (name);
return s;
}
int
playsound (name)
const char *name;
{
char *buf;
struct sounds *s;
if ((s = findsound (name)) != NULLSOUND) {
if (s->cmd == NULLCHAR || !*s->cmd)
return 0;
buf = malloc (strlen(s->cmd) + 18);
sprintf (buf, "(%s &) 2>/dev/null", s->cmd);
(void) system (buf);
return 1;
} else
return 0;
}
int
setsoundstr(argc,argv,sound)
int argc;
char *argv[];
char **sound;
{
if(argc < 2) {
if (*sound)
tprintf ("%s\n", *sound);
} else {
if (*sound)
free (*sound);
*sound = strdup (argv[1]);
}
return 0;
}
#endif /* SOUNDS */